package com.fary.boot;

import java.util.List;
import java.util.Set;

public interface ApplicationArguments {

	/**
	 * 返回传递给应用程序的原始未处理参数
	 */
	String[] getSourceArgs();

	/**
	 * 返回所有选项参数的名称，例如，如果参数是"--foo=bar --debug"将会返回["foo", "debug"]
	 */
	Set<String> getOptionNames();

	/**
	 * 返回解析后的选项参数集合中是否包含给定名称的选项
	 */
	boolean containsOption(String name);

	/**
	 * 返回与具有给定名称的arguments选项关联的值的集合
	 * 如果该选项存在并且没有参数值（例如：”--foo“）,则返回一个空集合
	 * 如果该选项存在并且只有一个值 (例如: "--foo=bar"), 则返回一个包含一个元素的集合["bar"]
	 * 如果该选项存在并且有多个值（例如："--foo=bar --foo=baz"）,则返回一个包含每个值元素的集合["bar", "baz"]
	 * 如果选项不存在，则返回null
	 * @param name 选项名称
	 * @return 返回选项值的集合（不存在返回null）
	 */
	List<String> getOptionValues(String name);

	/**
	 * 返回已解析的非选项参数，不存在返回空集合
	 */
	List<String> getNonOptionArgs();

}